package mutacion;

import gen.GenP2;

import java.util.ArrayList;

import utils.SRandom;
import cromosoma.Cromosoma;


//Elijo tres genes del cromosoma aleatoriamente y los intercambio con otros tres genes de forma aleatoria.

public class MutacionPropio implements IMutacion{

	static final int POSICIONESACAMBIAR=3;
	
	@Override
	public void mutacion(Cromosoma c, double probMutacion) {
		
		// Si no se muta se vuelve sin modificar el cromosoma
		if (SRandom.nextDouble() > probMutacion)
			return;
		
		//Array con las posiciones a cambiar;
		ArrayList<Integer> posiciones = new ArrayList<Integer>();
		ArrayList<Integer> posCiudades = new ArrayList<Integer>();
		
		for (int i=0; i< POSICIONESACAMBIAR; i++)
		{
			posiciones.add((SRandom.nextInt(c.get_longitudCromosoma()-1)));
			posCiudades.add((SRandom.nextInt(c.get_longitudCromosoma()-1)));
		}
		
		GenP2 ciudadAux;
		
		for (int pos=0; pos< posiciones.size(); pos++)
		{
			ciudadAux= (GenP2)c.get_gen(posiciones.get(pos));
			c.set_gen((GenP2) c.get_gen(posCiudades.get(pos)), posiciones.get(pos));
			c.set_gen(ciudadAux, posCiudades.get(pos));
		}
			
		c.set_aptitud(c.evalua());
	}
	
	

}
